package com.tql.mall.model.search;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;
import java.util.List;

/**
 * @Author: tyk
 * @Date: 2023/5/23 17:23
 * @Description: 操作es提供的实体类
 * 设置索引库和mapping
 * 封装数据
 * Document：文档注解
 * indexName：索引库名称
 * shards：分片（集群）
 * replicas：备份（集群）
 */
@Data
@Document(indexName = "goods", shards = 3, replicas = 2)
public class Goods {

    // 第一部分：sku信息
    // @Id 所修饰的字段作为文档的id
    @Id
    private Long id;

    /**
     * @Field 字段
     * type：字段类型
     * Keyword：不分词
     * Text：分词
     * Nested：对象
     * analyzer：分词器
     * searchAnalyzer：搜索时的分词器
     */
    @Field(type = FieldType.Keyword, index = false)
    private String defaultImg;

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String title;

    @Field(type = FieldType.Double)
    private Double price;

    @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    // 第二部分：分类信息
    @Field(type = FieldType.Long)
    private Long category1Id;

    @Field(type = FieldType.Keyword)
    private String category1Name;

    @Field(type = FieldType.Long)
    private Long category2Id;

    @Field(type = FieldType.Keyword)
    private String category2Name;

    @Field(type = FieldType.Long)
    private Long category3Id;

    @Field(type = FieldType.Keyword)
    private String category3Name;

    // 第三部分：店铺信息
    @Field(type = FieldType.Long)
    private Long shopId;

    @Field(type = FieldType.Keyword)
    private String shopName;

    // 第四部分：品牌信息
    @Field(type = FieldType.Long)
    private Long tmId;

    @Field(type = FieldType.Keyword)
    private String tmName;

    @Field(type = FieldType.Keyword)
    private String tmLogoUrl;

    // 商品的热度（该值由ES统计）
    @Field(type = FieldType.Long)
    private Long hotScore = 0L;

    // 第五部分：平台属性信息
    // 平台属性集合对象，Nested：支持嵌套查询
    @Field(type = FieldType.Nested)
    private List<SearchAttr> attrs;

}
